<?php

namespace App\Http\Controllers\Common;

use App\Models\Comment;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class CommentController extends Controller
{

    public function index(Request $request)
    {
        $class = str_replace('-','\\',$request->query('model'));
        $model = $class::find($request->query('id'));
        //通过下面的方式将某篇帖子对应的评论并使用懒加载的方式将评论的user信息一起都获取过来
        //使用$model->comment动态属性的方式可以将谋篇帖子的所有评论数据都拿过来,但是这样拿过来的评论数据中没有发表帖子的用户相关的信息
        //通过with预加载的方法可以在拿评论的同时将发评论的用户信息也一并拿过来
        return $model->comment()->with('user')->get();
    }


    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //首先拼凑出传递过来的评论对应对象模型的类完全名称
        $class = str_replace('-','\\',$request->model);
        //获取edutopic贴子对象
        $model = $class::find($request['id']);
        //通过帖子模型中与comment评论表的多态关联关系向评论表中添加内容
        $comment =  $model->comment()->create(['user_id'=>auth()->id(),'content'=>$request['content']]);
        /*
         * 这里正常应该返回已保存的模型实例,但是调用comment()多态关联却不是
         * dd($comment); */
        //这里有个问题,通过多态关联创建模型后这里返回的$comment是一个user对象,不应该是这样呀?????????????????
        //现在终于知道原因了,原来是打印的user并不是这里打印的,而是在CommentObservert评论观察器中打印的,comment模型对象中注册了观察器,所以当create创建完新模型后就会执行观察器中的动作,我之前在观察器中打印了$user忘记关掉了.
        //使用with预加载在读取数据的同时把关联数据也一起读取过来
//        \DB::enableQueryLog();
          return $result = $comment->with('user')->find($comment['id'])->toArray();
//        dd([\DB::getQueryLog(),$result->toArray()]);
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy(Comment $comment)
    {
        $comment->delete();
        return ['code'=>0,'message'=>'删除成功'];
    }
}
